interface Room {
    getContainers(): StructureContainer[];
    getController(): StructureController;
    getExtensions(): StructureExtension[];
    getExtractor(): StructureExtractor;
    getFactory(): StructureFactory;
    getLabs(): StructureLab[];
    getLinks(): StructureLink[];
    getNuker(): StructureNuker;
    getObserver(): StructureObserver;
    getPowerSpawn(): StructurePowerSpawn;
    getRamparts(): StructureRampart[];
    getMyRamparts(): StructureRampart[];
    getRoads(): StructureRoad[];
    getSpawns(): StructureSpawn[];
    getStorage(): StructureStorage;
    getTerminal(): StructureTerminal;
    getTombstones(): Tombstone[];
    getTowers(): StructureTower[];
    getWalls(): StructureWall[];
    getBarriers(): (StructureWall | StructureRampart)[];
    getSources(): Source[];
    getMineral(): Mineral;
    updateCache(): void;
}

type RoomObjectWithId = RoomObject & _HasId;

type RoomCacheKey =
    StructureCacheKey |
    'source' |
    'mineral' |
    'tombstone';

type StructureCacheKey =
    STRUCTURE_CONTAINER |
    STRUCTURE_CONTROLLER |
    STRUCTURE_EXTENSION |
    STRUCTURE_EXTRACTOR |
    STRUCTURE_FACTORY |
    STRUCTURE_KEEPER_LAIR |
    STRUCTURE_LAB |
    STRUCTURE_LINK |
    STRUCTURE_NUKER |
    STRUCTURE_OBSERVER |
    STRUCTURE_POWER_SPAWN |
    STRUCTURE_RAMPART |
    STRUCTURE_ROAD |
    STRUCTURE_SPAWN |
    STRUCTURE_STORAGE |
    STRUCTURE_TERMINAL |
    STRUCTURE_TOWER |
    STRUCTURE_WALL;